package main

import "fmt"

type Q struct {
	A int
	B int
	I int
}

func main() {
	var n int
	_, _ = fmt.Scan(&n)

	Qs := make([]*Q, n)
	for i := 0; i < n; i++ {
		Qs[i] = &Q{
			I: i + 1,
		}
		_, _ = fmt.Scan(&Qs[i].A, &Qs[i].B)
	}

	f(Qs)
	for i := 0; i < n; i++ {
		fmt.Printf("%d\n", Qs[i].I)
	}
}

func f(Qs []*Q) {
	for i := 1; i < len(Qs); i++ {
		for j := i; j > 0 && Qs[j].B >= Qs[j-1].B; j-- {
			if Qs[j].B > Qs[j-1].B {
				Qs[j], Qs[j-1] = Qs[j-1], Qs[j]
				continue
			}

			if Qs[j].A < Qs[j-1].A || (Qs[j].B == Qs[j-1].B && Qs[j].A == Qs[j-1].A) {
				break
			}

			Qs[j], Qs[j-1] = Qs[j-1], Qs[j]
		}
	}
}
